package com.muyaxuan.mail.dao;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class BaseDao {
	//定义两个静态变量数据库工厂SqlSessionFactory 和 线程管理者ThreadLocal<SqlSession>
	public static SqlSessionFactory factory;
	public static ThreadLocal<SqlSession> threadLocal=new ThreadLocal<>();
	//通过静态块初始化SqlSessionFactory，因为静态块只会在类第一次加载的时候执行
	static{
		
		try {
			//调资源的以流形式获得资源的方法 返回一个输入流
			InputStream in=Resources.getResourceAsStream("mybatis_config.xml");
			//获得流创建工厂
			factory=new SqlSessionFactoryBuilder().build(in);
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取SqlSession对象
	 * @return
	 */
	public static SqlSession getSqlSession(){
		//通过ThreadLocal获取sqlSession对象
		SqlSession session=threadLocal.get();
		
		if(session==null){
			//通过工厂创建sesion
			session=factory.openSession();
			//将session放入 threadLocal
			threadLocal.set(session);
		}
		
		return session;
		
	}
	/**
	 * 关闭session
	 */
	public static void closeSqlSession(){
		
		SqlSession session = threadLocal.get();
		
		if(session!=null){
			
			session.close();

		}
		//在会话关闭之后移除本地线程安全管理
		threadLocal.remove();
		
	}
	
}
